import { IKeyObject } from './keyobject'
import { IMultiDataType } from './multi_data'
import { IArea } from './overlay'
import { IPosition } from './position'

/**
 * @title 某个事件状态下的活动
 * @description
 */
interface ITimeFrame {
    timeStamp: string
    belongToKeyObject: IKeyObject
}

/**
 * @title 某一组 时间状态下 时间序列
 * @description
 */
interface ITimeSeries<T = ITimeFrame> {
    startDate: string
    endData: string
    timeRange: string[]
    ts: T[]
}

/**
 * @title 过渡方式枚举
 * @description
 */
enum IActivityTransitionEnum {
    MOVE_NEXT = 'move_next',
    ClEAR = 'clear',
}

/**
 * @title 相当于地图上某一时刻的某一个目标
 * @description
 */
interface IChangeEntity {
    id: string
    renderType: 'mask' | 'point'
    position: IPosition
    extent: IPosition[]
    area?: IArea
}

/**
 * @title 过渡方式
 */
type IActivityTransition = 'moveNext' | 'clear'

interface IChange {
    type: 'change'
    /**
     * @title 变化的目标列表
     * @description
     */
    changeObjects: IChangeEntity[]
    /**
     * @title 是从上一个位置移动到该位置,还是直接清空该目标重新根据变换的数据渲染
     */
    transitionType: IActivityTransition
}

/**
 * @title 目标在某个时间点的活动帧
 * @description
 */

interface IActivityTimeFrame extends ITimeFrame {
    /**
     * @title  该活动帧对应的多源数据类型
     * @description
     */
    data: IMultiDataType
    /**
     * @title 是否展示动画
     * @description
     */
    showAnimate: boolean
    /**
     * @title 监测到的变动
     * @description
     */
    change: IChange
}

/**
 * @title 活动时序
 * @description
 */

interface IActivityTimeSeries extends ITimeSeries<IActivityTimeFrame> {}

/**
 * @title 时序活动相关的接口
 * @description
 */
export type {
    ITimeFrame,
    ITimeSeries,
    IActivityTransitionEnum,
    IChangeEntity,
    IActivityTransition,
    IChange,
    IActivityTimeFrame,
    IActivityTimeSeries,
}
